package main
import "fmt"
//定义一个函数
func test (num int) {
	fmt.Println(num)

}
//定义一个函数，把另一个函数作为形参
func test2 (num1 int ,num2 float32 ,testFunc func(int)){
	fmt.Println(num1,num2,testFunc)
}

//使用自定义数据类型简洁写法
type myFunc func(int)
func test3 (num1 int ,num2 float32 ,testFunc myFunc){
	fmt.Println(num1,num2,testFunc)
}
//定义函数求和
func test4 (num1 int ,num2 int )(int,int){
	sum := num1 + num2
	diff := num1 - num2
	//fmt.Println(sum,diff)
	return sum,diff
}
func test5 (num3 int ,num4 int )(sum1 int,diff1 int){
	sum1 = num3 + num4
	diff1 = num3 - num4
	//fmt.Println(sum,diff)
	return 
}
func main(){
	//调用函数
	//函数也是一种数据类型，可以赋值给一个变量
	a := test
	fmt.Printf("a的数据类型是: %T,test函数的数据类型是: %T \n",a,test)
	//通过该变量可以使用函数调用
	a(10)// 等价于test(10)
	//调用test2函数
	test2(2,3.5,test)

	//自定义数据类型
	type myint int
	var eric myint = 30
	fmt.Println(eric)
	//虽然是别名，但go中认为int和myint不是同一种类型需要转换数据类型int(eric)
	var gwq int = int(eric)
	fmt.Println(gwq)
	//调用test3，试试自定义数据类型是否生效
	test3(23,3.15,a)
	//调用test4
	//var sum int 
	//var diff int
	aaa,bbb := test4(5,3)
	fmt.Println(aaa,bbb)

	ccc,ddd := test5(7,8)
	fmt.Println(ccc,ddd)
}
